在學習一個新的程式語言時,尤其是跟著範例寫的時候,由於對語法還不熟悉,時常會不小心把程式改壞。若是寫程式的時候,也可以有類似時光還原的功能,那該有多好?很幸運的,我們可以用版本管理系統來輔助我們把每一次的修改紀錄下來。在這篇文章裡,筆者就會示範如何使用 Git 版本管理系統來紀錄我們的專案。
IntelliJ IDEA 內建 Git GUI,方便我們以圖型介面的方式操作 Git。不過,由於它也只是一個 GUI,所以必須自行在本機端安裝 Git 版本管理系統。我們可以到 Git 官網 下載安裝檔或是以 Scoop 指令 $ scoop install git 安裝。 IntelliJ IDEA 會自動在幾個常見路徑抓取 git.exe,我們也可以手動指定 Git 路徑。完成 Git 的基本設定後,就可以在 IntelliJ IDEA 裡使用 Git 版本管理。
要以 Git 管理專案的版本,首先要在專案資料夾根目錄初始化 Git。請按 IntelliJ IDEA 功能表 VSC > Enable Version Control Intergration,出現對話框選「Git」後按 OK。
IntelliJ IDEA 會在左邊出現一個 Commit 面板及下方出現一個 Git 面板。其實剛剛這個動作,跟在 Terminal 底下輸入 $ git init 是一樣的意思。你可以在專案資料夾裡發現多了一個名為 .git 的隱藏資料夾。
每當我們使用 Git 來管理時,Git 會一直比對版本儲存庫(也就是 .git 資料夾裡)與專案資料夾之間的差異。由於我們才剛初始化版本管理,所以現在資料夾裡的所有檔案都沒有在版本儲存庫裡,我們要先把這些檔案 Commit 到版本儲存庫完成第一個 Commit。
打開 Commit 面板,會看到裡面有很多 Unversioned Files,把它打勾選擇全部的檔案,接著點開右下角的齒輪符號,把 Perform code analysis 和 Check TODO 取消選取,在輸入框裡輸入 Commit Message 後按下 Commit。
這樣就完成第一個 Commit。打開下方的 Git 面板,切換到 Log 分頁,你可以看到剛剛完成的 Commit 紀錄,未來可以在這個面板裡查看每一次 Commit 的時間軸。
完成第一個 Commit 後,接下來在修改程式的時候,IntelliJ IDEA 就可以隨時標示你的變更。這邊以 app.kt 為例,假如我們將原本的 Hello World 程式修改成如下:
fun main() {
println("What's your name?")
val name= readLine()
println("Hello $name!")
}
在編輯區域的 Gutter,你可以看到有不同的顏色標示。綠色代表是新增的程式碼、藍色代表的是修改的程式碼、白色的箭頭則代表程式碼被刪除。若你點選這些顏色標示,會出現浮動視窗顯示原本在該位置的程式碼,點選 Rollback 就可以一鍵復原該區塊的程式碼。
假如你想要看到的是整份檔案的左右對照,則可以開啟 Commit 面板,選擇你想要查看的檔案,按右鍵選擇「Show Diff」,就會出現該檔案的比對畫面。左邊是該檔案在儲存庫裡的版本、右邊是目前的修改,IntelliJ IDEA 會用視覺化的輔助來強調兩個版本間的差異。
Git 是一種分散式版本管理系統,也就是說它不需要依賴網路或中央伺服器就可以自行運作。而當我們今天需要跟別人交換檔案,比方說把範例程式碼公佈出去、把自己卡關的程式放到網路上求救、貢獻開放原始碼專案時,就需要一個中介平台。以目前流行使用的平台,就屬 Github 最知名。本系列文章的範例程式碼,也會推送一份到 Github 供大家參考,接下來就介紹怎麼在 IntelliJ IDEA 裡把專案推到 Github。
請選擇功能表 VCS > Import into Version Control > Share Project on Github,依照畫面提示輸入 Github 的登入資訊,或是使用 Token 登入。成功登入後,IntelliJ IDEA 會尋問專案名稱及 Remote 設定,完成後按 Share 就會將程式推送到 Github,並產生出公開的 Github Repository URL。
假如想要把範例程式碼複製一份回本地端,在 IntelliJ IDEA 的啟動頁就有「Get from Version Control」的選項可以使用。在這邊筆者想分享一個更簡單直覺的方式,就是用前幾篇文章提到的 Toolbox App!
請先依照你的使用習慣在 Google Chrome 或 Firefox 安裝瀏覽器 Extension。
安裝好後,請用瀏覽器開啟上一步的 Github URL,你應該會發現在網頁上多了 IntelliJ IDEA 的按鈕。按一下就會提示你開啟 Toolbox App,Toolbox App 就會啟動 IntelliJ IDEA 並尋問你要 Clone 到哪個位置。按下 OK 後,原本要 3-4 步、路徑剪剪貼貼的動作就能一鍵完成!
這個 JetBrains Toolbox Extension 的作用很簡單,每次瀏覽到 Github、Gitlab 或 Bitbucket 時,Extension 都會自動識別該 Repository 用的程式語言為何,然後幫你放對應 IDE 的按鈕,你就可以一鍵把 Repository Clone 回來,然後在該 IDE 裡打開,省去很多操作時間。在這邊也把這個當成小作業,讓大家練習把範例 Repository 複製一份到自己的本機。
在這篇文章裡可以看到因為有 Git 加上 IntelliJ IDEA 的視覺輔助,我們可以在寫程式的當下就知道我們新增、刪除、修改了什麼,若發現剛剛的修改讓程式壞了可以立即還原,還能透過 Github 來做備份與分享。這就是為什麼筆者會說在學習程式語言時,使用版本管理會有很大幫助的原因。這種隨時有安全繩在保護的感覺,會讓你更安心地去試驗各種語法,學習起來更有效果。
文章的最後要提醒大家,Git 時間軸上的每一個紀錄都是要你自己 Commit 才會有的。換句話說,若你寫了很久的程式但都沒有 Commit,這些修改過程都不會有紀錄的。因此,我會建議初學者在一開始可以每完成一個步驟就 Commit 一次。只要能夠協助你學習,即便每一次 Commit 修改幅度很小也沒關係,等到熟悉後再來遵循 Commit 的最佳實踐即可。希望版本管理可以成為你往後學習 Collection 時的最佳助手。